Apache POI এর মাধ্যমে আপনি Microsoft Word (DOCX) ডকুমেন্টের Security এবং Password Protection সেট করতে পারেন। যদিও Apache POI পুরোপুরি Password Protection বা Encryption এর সমর্থন প্রদান করে না, কিছু সীমিত ফিচার যেমন ডকুমেন্টে পাসওয়ার্ড যোগ করা এবং Security Settings পরিবর্তন করা সম্ভব।
এই প্রক্রিয়াগুলি সাধারণত Microsoft Word ডকুমেন্টে তথ্যের নিরাপত্তা নিশ্চিত করার জন্য ব্যবহৃত হয়। এখানে আমরা কিভাবে Security এবং Password Protection সেট করা যায়, তার একটি ধারণা দেখাবো।
যদিও Apache POI এর মাধ্যমে সরাসরি password protection প্রয়োগ করা সম্ভব নয়, তবে আপনি ডকুমেন্টের নিরাপত্তা সেটিংস পরিবর্তন করতে পারেন। বাস্তবিকভাবে, আপনি Apache POI ব্যবহার করে ডকুমেন্টে password protection সন্নিবেশিত করতে পারেন না, তবে আপনি Apache POI এর সাথে ব্যবহারযোগ্য অন্য লাইব্রেরি বা Microsoft Office API ব্যবহার করতে পারেন।
ডকুমেন্টে password protection যোগ করতে Aspose.Words বা Docx4j এর মতো লাইব্রেরি ব্যবহার করা যেতে পারে।
import com.aspose.words.Document;
import com.aspose.words.SaveOptions;
import com.aspose.words.SaveFormat;
public class SetPasswordProtection {
public static void main(String[] args) throws Exception {
// একটি Word ডকুমেন্ট লোড করা
Document doc = new Document("document.docx");
// ডকুমেন্টে পাসওয়ার্ড নিরাপত্তা যোগ করা
doc.protect(com.aspose.words.ProtectionType.READ_ONLY);
doc.save("document_with_password.docx", SaveOptions.createSaveOptions(SaveFormat.DOCX));
System.out.println("Password protection added!");
}
}
এখানে, Aspose.Words লাইব্রেরির মাধ্যমে read-only নিরাপত্তা সেট করা হয়েছে, যা ডকুমেন্টটি পাসওয়ার্ড ছাড়া সম্পাদনা করা যাবে না।
Apache POI ডকুমেন্টের কিছু নিরাপত্তা সেটিংস পরিবর্তন করতে সাহায্য করতে পারে, যেমন metadata নিরাপত্তা এবং content encryption। তবে, পুরো ডকুমেন্টে নিরাপত্তা (যেমন পাসওয়ার্ড বা অন্যান্য এনক্রিপশন ফিচার) যোগ করা POI এর মাধ্যমে সরাসরি করা সম্ভব নয়। এর জন্য আপনাকে external libraries বা Microsoft API ব্যবহার করতে হবে।
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class SecuritySettings {
public static void main(String[] args) throws IOException {
XWPFDocument document = new XWPFDocument();
// ডকুমেন্টের মেটাডেটা সেট করা
document.getProperties().getCoreProperties().setTitle("Secure Document");
document.getProperties().getCoreProperties().setAuthor("John Doe");
document.getProperties().getCoreProperties().setSubject("Apache POI Security");
// ডকুমেন্টে কিছু টেক্সট যোগ করা
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("This document contains security settings.");
// ডকুমেন্ট সেভ করা
try (FileOutputStream out = new FileOutputStream("secure_document.docx")) {
document.write(out);
}
System.out.println("Security settings applied to the Word document!");
}
}
এখানে, ডকুমেন্টের metadata সেট করা হয়েছে, তবে এটি সম্পূর্ণ ডকুমেন্টের পাসওয়ার্ড বা এনক্রিপশন নিরাপত্তা সংক্রান্ত কাজ নয়।
পাসওয়ার্ড সুরক্ষা এবং এনক্রিপশন ফিচারগুলি Microsoft Word ডকুমেন্টে Apache POI দ্বারা সরাসরি সাপোর্ট করা হয় না, কিন্তু অন্যান্য লাইব্রেরি যেমন Docx4j বা Aspose.Words এর মাধ্যমে এই ফিচারগুলি প্রয়োগ করা সম্ভব। এই লাইব্রেরিগুলি ডকুমেন্টে পাসওয়ার্ড সুরক্ষা বা AES Encryption প্রয়োগ করার সুযোগ দেয়।
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.jaxb.Context;
public class SetPasswordProtectionWithDocx4j {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File("document.docx"));
// পাসওয়ার্ড সুরক্ষা যোগ করা
wordMLPackage.setPassword("password123");
// ডকুমেন্ট সেভ করা
wordMLPackage.save(new java.io.File("document_with_password.docx"));
System.out.println("Password protection added using Docx4j.");
}
}
এখানে, Docx4j এর মাধ্যমে পাসওয়ার্ড সুরক্ষা যোগ করা হয়েছে।
যদিও Apache POI এর মাধ্যমে সরাসরি পাসওয়ার্ড প্রোটেকশন যোগ করা সম্ভব নয়, আপনি নীচের নিরাপত্তা পদ্ধতিগুলি অনুসরণ করতে পারেন:
Apache POI এর মাধ্যমে আপনি Microsoft Word (DOCX) ডকুমেন্টের Security সেটিংস পরিবর্তন এবং Metadata কাস্টমাইজ করতে পারেন, তবে Password Protection বা Encryption সেট করা সম্ভব নয়। এসব ফিচারের জন্য আপনাকে Aspose.Words, Docx4j, বা Microsoft Office API এর মতো বাইরের লাইব্রেরি ব্যবহার করতে হবে। এই বাইরের লাইব্রেরিগুলির মাধ্যমে আপনি ডকুমেন্টে পাসওয়ার্ড সুরক্ষা এবং এনক্রিপশন প্রয়োগ করতে পারবেন, যা ডকুমেন্টের নিরাপত্তা নিশ্চিত করতে সাহায্য করবে।
Password Protection হল এমন একটি নিরাপত্তা ব্যবস্থা যা ডকুমেন্টে অজান্তে বা অনুমতি ছাড়া প্রবেশ প্রতিরোধ করে। Apache POI লাইব্রেরি ব্যবহার করে, আপনি Word ডকুমেন্টে পাসওয়ার্ড প্রটেকশন যোগ করতে পারেন। তবে, Apache POI সরাসরি Word ডকুমেন্টে পাসওয়ার্ড প্রটেকশন যোগ করার জন্য কোনো API সরবরাহ করে না। এই কার্যকারিতাটি অর্জন করতে, আপনি সাধারণত Apache POI এর সাথে Apache POIFS (Poor Obfuscation Implementation File System) বা LibreOffice/OpenOffice ব্যবহার করতে পারেন।
তবে, Apache POI ব্যবহার করে পাসওয়ার্ড প্রটেকশন যোগ করতে কিছু কাজ করা সম্ভব, কিন্তু এর জন্য অন্য লাইব্রেরি বা টুলসের সাহায্য নিতে হয়।
বর্তমানে Apache POI শুধুমাত্র ডকুমেন্ট তৈরি, সম্পাদনা ও পাঠানোর জন্য ব্যবহৃত হয়, তবে এর মধ্যে ডকুমেন্টের পাসওয়ার্ড প্রটেকশন ফিচারটি সরাসরি সাপোর্ট করা হয় না। পাসওয়ার্ড প্রটেকশন প্রয়োগ করার জন্য নিম্নলিখিত দুটি পথ অবলম্বন করা যেতে পারে:
LibreOffice বা OpenOffice এর command-line tools ব্যবহার করে, আপনি একটি Word ডকুমেন্ট (PPT, DOCX) পাসওয়ার্ড দিয়ে সুরক্ষিত করতে পারেন। উদাহরণস্বরূপ:
soffice --headless --convert-to docx --password=yourpassword input.docx
এতে করে আপনি DOCX ফাইলকে পাসওয়ার্ড সুরক্ষিত করতে পারবেন।
Apache POIFS একটি পুরানো ফাইল সিস্টেম ইমপ্লিমেন্টেশন যা .doc (Word 97-2003) ফাইলের জন্য ব্যবহৃত হয়। এটি পাসওয়ার্ড সুরক্ষা যোগ করতে সক্ষম, কিন্তু .docx ফাইলের জন্য এটি কাজ করে না।
আপনি যদি .docx ফাইলের জন্য পাসওয়ার্ড প্রটেকশন ব্যবহার করতে চান, তাহলে Aspose.Words বা Docx4j এর মতো তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করা যেতে পারে। এগুলিতে পাসওয়ার্ড প্রটেকশন যোগ করার ফিচার থাকে। এখানে একটি উদাহরণ দেয়া হলো Aspose.Words ব্যবহার করে:
import com.aspose.words.Document;
import com.aspose.words.SaveOptions;
public class PasswordProtectionExample {
public static void main(String[] args) {
try {
// Word ডকুমেন্ট লোড করা
Document doc = new Document("input.docx");
// পাসওয়ার্ড সেট করা
doc.protect(com.aspose.words.ProtectionType.READ_ONLY, "yourpassword");
// ডকুমেন্ট সেভ করা
doc.save("protected_doc.docx", SaveOptions.createSaveOptions(SaveOptions.DOCX));
System.out.println("Word ডকুমেন্টে পাসওয়ার্ড প্রটেকশন সফলভাবে যোগ করা হয়েছে!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
যদি আপনি পাসওয়ার্ড সুরক্ষিত ডকুমেন্ট খুলতে চান, তবে আপনাকে সঠিক পাসওয়ার্ড প্রদান করতে হবে। উদাহরণস্বরূপ, Aspose.Words ব্যবহার করে পাসওয়ার্ড প্রটেকশন উন্মুক্ত করা যেতে পারে:
import com.aspose.words.Document;
public class UnlockDocumentExample {
public static void main(String[] args) {
try {
// পাসওয়ার্ড সুরক্ষিত ডকুমেন্ট লোড করা
Document doc = new Document("protected_doc.docx");
// সঠিক পাসওয়ার্ড দিয়ে ডকুমেন্ট আনলক করা
doc.unprotect("yourpassword");
// ডকুমেন্ট সেভ করা
doc.save("unlocked_doc.docx");
System.out.println("Word ডকুমেন্ট আনলক করা হয়েছে!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Apache POI সরাসরি Word ডকুমেন্টে পাসওয়ার্ড প্রটেকশন যোগ করার জন্য সমর্থন না থাকলেও, আপনি LibreOffice/OpenOffice বা Aspose.Words এর মতো তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে পাসওয়ার্ড প্রটেকশন যোগ এবং ম্যানেজ করতে পারেন। Apache POI এর মাধ্যমে আপনি ডকুমেন্ট তৈরি ও সম্পাদনা করতে পারেন, তবে পাসওয়ার্ড প্রটেকশন যোগ করার জন্য বিকল্প টুলস ব্যবহার করা প্রয়োজন।
Apache POI ব্যবহার করে Microsoft Word ডকুমেন্টে Read-only এবং Edit modes কনফিগার করা সম্ভব। Read-only mode হলো এমন একটি অবস্থা যেখানে ডকুমেন্টের কনটেন্ট শুধুমাত্র দেখা যায়, সম্পাদনা করা সম্ভব নয়। অন্যদিকে, Edit mode হলো একটি অবস্থা যেখানে ডকুমেন্ট সম্পাদনা করা যায়। Apache POI এর মাধ্যমে আপনি এই মোডগুলোর মধ্যে স্যুইচ করতে বা কাস্টম কনফিগারেশন করতে পারেন।
Read-only mode কনফিগার করার জন্য আপনি Word ডকুমেন্টে পাসওয়ার্ড প্রোটেকশন বা এক্সেস কন্ট্রোল সেট করতে পারেন, তবে Apache POI সরাসরি "read-only" মোড সেট করার সুবিধা প্রদান করে না। তবে, আপনি ডকুমেন্টটি ওপেন করার সময় এর মধ্যে Protection যুক্ত করতে পারেন, যাতে এটি সম্পাদনার জন্য সুরক্ষিত থাকে।
যদি আপনি ডকুমেন্টটি read-only হিসেবে সেট করতে চান, তবে আপনি সেটি password protection যোগ করে করতে পারেন। Password protection প্রক্রিয়া মূলত Word এর Office Open XML (OOXML) স্ট্যান্ডার্ডের মাধ্যমে কাজ করে, তবে এটি POI এর মাধ্যমে সরাসরি সাপোর্ট করা হয় না। তবে, read-only ডকুমেন্ট তৈরি করার জন্য আপনি ডকুমেন্টের core properties ব্যবহার করে একটি সীমিত অনুমতি প্রদান করতে পারেন।
Edit Mode সাধারণত একটি ডকুমেন্টের modification (সম্পাদনা) সক্ষম করার জন্য ব্যবহৃত হয়। আপনি যদি ডকুমেন্টে সম্পাদনার জন্য নির্দিষ্ট অংশ অ্যাক্সেসযোগ্য করতে চান, তবে আপনি Protection এর মাধ্যমে নির্দিষ্ট এলাকাকে সম্পাদনার জন্য উন্মুক্ত রাখতে পারেন। কিন্তু, Apache POI সম্পূর্ণভাবে এই "Protection" সরাসরি ব্যবস্থাপনা করে না।
আপনি Word ডকুমেন্টে Edit Mode কার্যকর করতে, সম্পূর্ণ ডকুমেন্টে সম্পাদনা অনুমতি দিতে পারেন, অথবা নির্দিষ্ট অংশের জন্য unprotected sections রাখতে পারেন।
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.HeaderFooterPolicy;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class DocumentProtectionExample {
public static void main(String[] args) throws IOException {
// ডকুমেন্ট ওপেন করা
FileInputStream fis = new FileInputStream("EditableDocument.docx");
XWPFDocument document = new XWPFDocument(fis);
// ডকুমেন্টে প্রোটেকশন যোগ করা
XWPFDocument documentWithProtection = document;
// সম্পাদনা নিষিদ্ধ করতে প্রোটেকশন অ্যাপ্লাই করা
documentWithProtection.createProtection().setEditMode(false);
// নতুন ডকুমেন্ট সংরক্ষণ করা
try (FileOutputStream out = new FileOutputStream("ProtectedDocument.docx")) {
documentWithProtection.write(out);
}
System.out.println("ডকুমেন্টে Read-only মোড সফলভাবে অ্যাপ্লাই করা হয়েছে!");
}
}
Word ডকুমেন্টে Protection এবং Unprotection পরিচালনা করা সম্ভব, যেখানে আপনি পুরো ডকুমেন্ট বা কিছু অংশ unprotected রাখতে পারেন।
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DocumentUnprotectionExample {
public static void main(String[] args) throws IOException {
// ডকুমেন্ট ওপেন করা
FileInputStream fis = new FileInputStream("ProtectedDocument.docx");
XWPFDocument document = new XWPFDocument(fis);
// ডকুমেন্টে প্রোটেকশন রিমুভ করা (Edit Mode)
document.removeProtection();
// পরিবর্তিত ডকুমেন্ট সংরক্ষণ করা
try (FileOutputStream out = new FileOutputStream("EditableDocument.docx")) {
document.write(out);
}
System.out.println("ডকুমেন্টে Edit মোড সক্রিয় করা হয়েছে!");
}
}
Apache POI ব্যবহার করে আপনি Partially Protected Documents তৈরি করতে পারেন, যেখানে ডকুমেন্টের কিছু অংশকে unprotected রাখা যায় এবং কিছু অংশে read-only প্রোটেকশন কার্যকর করা হয়। এটি সাধারণত section-based protection বা form fields ব্যবহারের মাধ্যমে করা হয়।
Apache POI এর মাধ্যমে Microsoft Word ডকুমেন্টে Read-only এবং Edit Modes কনফিগার করা সম্ভব, তবে সরাসরি সম্পূর্ণ read-only mode এবং edit mode কনফিগার করার জন্য প্রোটেকশন ব্যবস্থাপনা করতে হয়। Protection এবং Unprotection এর মাধ্যমে আপনি ডকুমেন্টে নির্দিষ্ট অংশের প্রোটেকশন এবং সম্পাদনা সুবিধা নিয়ন্ত্রণ করতে পারেন। ডকুমেন্টে password protection এবং restricted editing অ্যাপ্লাই করার মাধ্যমে আপনি বিভিন্ন স্তরে read-only এবং edit mode কার্যকর করতে পারেন।
অ্যাপাচি পিওআই (Apache POI) সরাসরি Word ডকুমেন্টের Encryption এবং Decryption এর জন্য সমর্থন প্রদান করে না। তবে, Apache POI এর মাধ্যমে আপনি password-protect করা Word ডকুমেন্ট তৈরি করতে পারেন, কিন্তু এটি শুধুমাত্র ডকুমেন্টের metadata এবং basic encryption এর জন্য সীমাবদ্ধ। Advanced Encryption (যেমন AES বা অন্য আধুনিক এনক্রিপশন মেথড) করার জন্য আপনাকে অন্য কোনও লাইব্রেরি, যেমন Apache POI এর বাইরের BouncyCastle বা Java Cryptography API ব্যবহার করতে হবে।
এখানে Apache POI ব্যবহার করে Word ডকুমেন্টের encryption এবং decryption এর প্রাথমিক ধারণা দেওয়া হবে, তবে এটি সঠিক এনক্রিপশন স্তরের সমর্থন নয়, বরং একটি password-based protection এর উদাহরণ হবে।
Apache POI সরাসরি এনক্রিপশন বা ডিক্রিপশন পরিচালনা না করলেও, আপনি password-protection এর মাধ্যমে একটি ডকুমেন্টে encryption তৈরি করতে পারেন। এখানে, XWPFDocument ব্যবহার করে একটি ডকুমেন্টে password সেট করা হচ্ছে।
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import java.io.*;
public class EncryptWordDocument {
public static void main(String[] args) throws Exception {
// নতুন Word ডকুমেন্ট তৈরি করা
XWPFDocument document = new XWPFDocument();
// একটি প্যারাগ্রাফ তৈরি করা
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("This document is protected with a password.");
// ডকুমেন্টটি সেভ করার আগে password protection যোগ করা
FileOutputStream out = new FileOutputStream("protected_document.docx");
// এখানে password-protection যুক্ত করার জন্য POI সরাসরি সমর্থন না থাকলেও,
// password protect করার জন্য আপনাকে Apache POI-এর বাইরে অন্য কোনও লাইব্রেরি ব্যবহার করতে হবে,
// যেমন Apache Tika বা BouncyCastle।
// Document save (without real password protection)
document.write(out);
out.close();
System.out.println("Document created successfully. Encryption functionality can be added using external libraries.");
}
}
এখানে password protection অ্যাড করার জন্য আপনাকে Apache POI এর বাইরে অন্য লাইব্রেরি ব্যবহার করতে হবে, কারণ POI স্বতন্ত্রভাবে password encryption সাপোর্ট করে না।
পাসওয়ার্ড-প্রোটেক্টেড Word ডকুমেন্ট খোলার জন্য আপনাকে প্রোগ্রামmatically ডিক্রিপ্ট করতে হবে। যেহেতু Apache POI এই ফিচারটি সরাসরি সাপোর্ট করে না, তাই আপনাকে Apache Tika বা BouncyCastle এর মত লাইব্রেরি ব্যবহার করে ডিক্রিপশন করতে হবে।
এখানে একটি BouncyCastle লাইব্রেরির উদাহরণ দেওয়া হলো, যা আপনাকে আধুনিক এনক্রিপশন/ডিক্রিপশন সমাধান দিতে পারে:
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.*;
public class DecryptWordDocument {
public static void main(String[] args) throws Exception {
// পাসওয়ার্ড দিয়ে encrypted ডকুমেন্ট লোড করা
FileInputStream fis = new FileInputStream("protected_document.docx");
// এখানে পাসওয়ার্ড দিয়ে ডকুমেন্ট ওপেন করতে BouncyCastle বা Apache Tika প্রয়োজন হবে।
XWPFDocument document = new XWPFDocument(fis); // POI শুধুমাত্র Word ডকুমেন্ট পড়তে পারে, পাসওয়ার্ড চেক না করলেও
// ডকুমেন্টের কন্টেন্ট পড়া
for (XWPFParagraph paragraph : document.getParagraphs()) {
System.out.println(paragraph.getText());
}
fis.close();
}
}
যেহেতু Apache POI সরাসরি এনক্রিপশন এবং ডিক্রিপশন সমর্থন করে না, তাই আপনাকে Apache Tika বা BouncyCastle লাইব্রেরি ব্যবহার করতে হবে। এই লাইব্রেরিগুলি Password Protection এবং Encryption এর জন্য প্রয়োজনীয় সমাধান প্রদান করতে পারে।
Apache POI ডকুমেন্টে সরাসরি encryption বা decryption সমর্থন না করলেও, আপনি বাইরের লাইব্রেরি যেমন BouncyCastle বা Apache Tika ব্যবহার করে password protection যোগ এবং ডিক্রিপশন পরিচালনা করতে পারেন। POI শুধুমাত্র ডকুমেন্টের কন্টেন্ট পড়তে সহায়ক হলেও, পাসওয়ার্ড প্রোটেকশন এবং এনক্রিপশন বাস্তবায়নের জন্য আপনাকে বাইরের লাইব্রেরি ব্যবহার করতে হবে।
Apache POI লাইব্রেরি মূলত Microsoft Office ডকুমেন্টগুলোর সাথে কাজ করার জন্য ব্যবহৃত হয়। তবে, Digital Signatures এবং Document Authentication এর মতো নিরাপত্তা বিষয়ক কাজের জন্য Apache POI সরাসরি সমর্থন প্রদান করে না। কিন্তু কিছু external লাইব্রেরি ব্যবহার করে Apache POI এর সাথে digital signature যুক্ত করা এবং ডকুমেন্টের authentication করা সম্ভব।
Digital Signatures মূলত ডকুমেন্টের সার্বিক নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়। এটি একটি এনক্রিপ্টেড কোড যা প্রমাণ করে যে ডকুমেন্টটি একটি নির্দিষ্ট ব্যক্তি দ্বারা সই করা হয়েছে এবং ডকুমেন্টটি অপরিবর্তিত রয়েছে।
ডিজিটাল সই সাধারণত Public Key Infrastructure (PKI) এর মাধ্যমে তৈরি করা হয়, যেখানে দুটি কী ব্যবহৃত হয়:
ডকুমেন্টে সই করার পরে, এটি প্রমাণ করে যে ডকুমেন্টটি কোনো একটি নির্দিষ্ট ব্যক্তির তৈরি এবং তাতে কোনো পরিবর্তন করা হয়নি।
Apache POI লাইব্রেরি সরাসরি Digital Signature যোগ করার কাজ করে না। তবে, আপনি BouncyCastle বা Apache Santuario এর মতো বাইরের লাইব্রেরি ব্যবহার করে ডিজিটাল সিগনেচার তৈরি এবং যাচাই করতে পারেন।
BouncyCastle হল একটি ওপেন সোর্স লাইব্রেরি যা cryptographic operations এর জন্য সমর্থন প্রদান করে, যেমন digital signatures তৈরি করা। এটি Java এর মাধ্যমে সহজে ব্যবহার করা যেতে পারে।
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.IOUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.io.*;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Arrays;
public class DigitalSignatureExample {
public static void main(String[] args) {
try {
// BouncyCastle Provider এড করা
Security.addProvider(new BouncyCastleProvider());
// একটি KeyPair তৈরি করা (Private এবং Public Key)
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// ডকুমেন্ট তৈরি
XWPFDocument document = new XWPFDocument();
FileOutputStream fos = new FileOutputStream("DigitalSignedDocument.docx");
document.write(fos);
fos.close();
// ডিজিটাল সিগনেচার তৈরি করা
byte[] docBytes = IOUtils.toByteArray(new FileInputStream("DigitalSignedDocument.docx"));
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(keyPair.getPrivate());
signature.update(docBytes);
byte[] digitalSignature = signature.sign();
// সিগনেচার সংরক্ষণ
FileOutputStream signatureFile = new FileOutputStream("DocumentSignature.sig");
signatureFile.write(digitalSignature);
signatureFile.close();
System.out.println("Digital Signature added successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
এটি শুধু সিগনেচার তৈরির একটি উদাহরণ। সিগনেচার যাচাই করার জন্য আপনাকে Public Key ব্যবহার করতে হবে।
ডকুমেন্টের প্রমাণীকরণ নিশ্চিত করার জন্য Digital Signatures অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। যখন একটি ডকুমেন্টে ডিজিটাল সিগনেচার যোগ করা হয়, তখন তা নিশ্চিত করে যে:
ডকুমেন্টের সঠিকতা যাচাই করতে, আপনি পাবলিক কী ব্যবহার করে ডিজিটাল সিগনেচার যাচাই করতে পারেন।
import java.io.*;
import java.security.*;
import java.security.cert.X509Certificate;
import java.util.Arrays;
public class VerifyDigitalSignature {
public static void main(String[] args) {
try {
// Public Key লোড করা (যেটি signer থেকে পাওয়া যাবে)
FileInputStream fis = new FileInputStream("public_key.pem");
byte[] publicKeyBytes = fis.readAllBytes();
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBytes));
// সিগনেচার লোড করা
FileInputStream sigFis = new FileInputStream("DocumentSignature.sig");
byte[] signatureBytes = sigFis.readAllBytes();
// ডকুমেন্ট লোড করা
FileInputStream docFis = new FileInputStream("DigitalSignedDocument.docx");
byte[] docBytes = docFis.readAllBytes();
// সিগনেচার যাচাই
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(publicKey);
signature.update(docBytes);
boolean isSignatureValid = signature.verify(signatureBytes);
if (isSignatureValid) {
System.out.println("Digital Signature is valid!");
} else {
System.out.println("Digital Signature is invalid!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
এই উদাহরণে, আপনি Public Key ব্যবহার করে ডকুমেন্টের সিগনেচার যাচাই করছেন।
Apache POI মূলত Microsoft Word ডকুমেন্টে কাজ করার জন্য ব্যবহৃত হলেও, Digital Signature এবং Document Authentication যোগ করার জন্য বাইরের লাইব্রেরি যেমন BouncyCastle ব্যবহার করা হয়। ডিজিটাল সিগনেচার ডকুমেন্টের নিরাপত্তা নিশ্চিত করতে সহায়ক, এবং এটি ডকুমেন্টের প্রকৃততা যাচাই করতে ব্যবহৃত হয়। যদিও Apache POI সরাসরি এই ফিচারটি সমর্থন করে না, তবে বাইরের ক্রিপ্টোগ্রাফিক লাইব্রেরি ব্যবহার করে আপনি digital signature তৈরি এবং যাচাই করতে পারবেন।
common.read_more